perm filename ALTERN[DIS,DBL] blob sn#219350 filedate 1976-06-14 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	. SSSEC(Alternatives to the Agenda Scheme)
C00007 ENDMK
C⊗;
. SSSEC(Alternatives to the Agenda Scheme)

<<Should "Alterns-to-agenda" be moved elsewhere?>

Below  is a digression, explaining  why the agenda  scheme was chosen
instead of some more conventional  way of managing a large  heuristic
search.

.BN

λλ Why not  let a "node" be  a concept, instead of the  artifice of a
facet/concept/reasons  structure?  In a  standard heuristic search, a
particular operation is applied  to a particular node, and  new nodes
result.   To fill in all  the facets of a concept  would take several
cpu minutes.  This is simply too long to be practical, and it is  not
very desirable: we don't want to specialize  and generalize every new
concept!

λλ  We could  let the  individual heuristic  rules be  considered our
knowledge  sources. But  the  most  interesting  effects  occur  when
several heuristics  combine to support  some task. Also, the  unit of
action  ("apply a certain heuristic")  would then be  too quick for a
human user to follow.

λλ We could  consider that we have  one central program, but  that it
can ⊗4↓_recurse_↓⊗* whenever a  better task becomes evident.  One can
then  imagine  that  the  control-stack  would  contain  a  list   of
interrupted  tasks, getting  more  and  more worthwhile  (better  and
better reasons) as we proceed toward the current moment.  The current
task can't be interrupted, except for the sake of performing  an even
⊗4more⊗* interesting task.  If  the current task finishes, the normal
recursion  process will take  us back to  finish the last  task.  But
recent discoveries may dramatically effect the  worthwhileness of the
activities on the  control stack; how could we  reorder them?  Within
the standard function-calling scheme, this can't be done.

λλ It sounds  like we might  need to have  a ⊗4↓_process_↓⊗*  scheme,
involving many active tasks, which can go to  sleep and wake up under
certain conditions.   But each task only  takes about 10 cpu seconds.
Is it really worth it to worry about interrupting one of these tasks,
once it's started?  Is it worth using a hundred memory cells to store
the state  of process that would only use up 5 more cpu seconds if we
let it  wake up  and continue?   What  if we  have to  keep around  a
thousand partially-complete tasks?

λλ Most of the tasks we have hanging around are fairly independent of
each  other,   so  perhaps   we  could   exploit  the   power  of   a
⊗4↓_multi-processor_↓⊗*.  But we have thousands  of little tasks, and
they spawn new ones. A fixed number of processors can provide at best
a constant  speed-up  factor.   Also,  the results  of  experiment...
indicate  that  a  very  important   mechanism  is  the  one  whereby
highly-rated  new tasks  get suggested  dynamically, while  the current
task is  executing.   So the  gain  in speed  would only  be a  small
factor.

.END